package com.kcht.np.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kcht.np.entity.Relation;
import com.kcht.np.entity.SysPermission;
import com.kcht.np.entity.SysRole;
import com.kcht.np.vo.role.RoleCanModifyInfo;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

/**
  * <p>
  * 角色 Mapper 接口
  * </p>
  *
  * @Package:        com.kcht.np.mp.mapper
  * @Description:    角色 Mapper 接口
  * @Author:         liuqi
  * @CreateDate:     2020/3/31 21:21
 */
public interface SysRoleMapper extends BaseMapper<SysRole> {

    /**
      * @Description: 根据 用户 ID 查询拥有的角色列表
      * @param:       uid
      * @return:      Set<SysRole>
      * @Author:      liuqi
      * @CreateDate:  2020/3/31 21:10
    */
    Set<SysRole> findRolesByUserId(Long uid);

    /**
     * 授予多个权限给角色，注意不要重复授予
     */
    int grantPermissions(List<Relation> record);

    /**
     * 解除授予标识为{rid}角色的所有权限
    */
    int deleteHavePermissions(Long rid);

    /**
     * 被授予标识为{rid}角色的用户数量
     */
    Integer countUserRef(Long rid);

    /**
     * 引用标识为{rid}角色的所有用户
     * */
    Set<String> usersRefRole(Long rid);

    /**
     * 查询出角色名和描述可以匹配关键字{keywords}的所有角色
     */
    Set<SysRole> selectByKeywords(String keywords);

    /**
     * 查询标识为{rid}的用户的所有权限
     * */
    Set<SysPermission> queryPermissionsByRoleId(Long rid);

    void updateRole(@Param("info") RoleCanModifyInfo info);

    @Select("select count(*) from tb_sys_role where role_name=#{roleName}")
    int countByRoleName(String roleName);

    @Insert("INSERT INTO tb_sys_role_permission VALUES (#{pid}, #{rid})")
    void addPermission(Long pid,Long rid);
    @Delete("delete  from tb_sys_role_permission where permission_id=#{pid} and role_id=#{rid}")
    void deletePermission(Long pid,Long rid);
}
